package Java2Test.mythread.threadtest7;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class ThreadTest7 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
       /*
        多线程练习5（抽奖箱抽奖）
        有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为
        {10,5,20,50,100,200,500,800,2,80,300,700};
        创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”
        随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
            每次抽出一个奖项就打印一个(随机)
            抽奖箱1 又产生了一个 10 元大奖
            抽奖箱1 又产生了一个 100 元大奖
            抽奖箱1 又产生了一个 200 元大奖
            抽奖箱1 又产生了一个 800 元大奖
            抽奖箱2 又产生了一个 700 元大奖

        多线程练习 6（多线程统计并求最大值）
        在上一题基础上继续完成如下需求：
        每次抽的过程中，不打印，抽完时一次性打印 (随机)
        在此次抽奖过程中，抽奖箱 1 总共产生了 6 个奖项。
        分别为：10,20,100,500,2,300，最高奖项为 300 元，总计额为 932 元
        在此次抽奖过程中，抽奖箱 2 总共产生了 6 个奖项。
        分别为：5,50,200,800,80,700，最高奖项为 800 元，总计额为 1835 元

        多线程练习7（多线程之间的比较）
        在上一题基础上继续完成如下需求：
        在此次抽奖过程中，抽奖箱1总共产生了6个奖项，分别为：10,20,100,500,2,300
        最高奖项为300元，总计额为932元
        在此次抽奖过程中，抽奖箱2总共产生了6个奖项，分别为：5,50,200,800,80,700
        最高奖项为800元，总计额为1835元
        在此次抽奖过程中，抽奖箱2中产生了最大奖项，该奖项金额为800元
        以上打印效果只是数据模拟，实际代码运行的效果会有差异
     */

        Integer[] prizePools = {10, 5, 20, 50, 100, 200, 500, 800, 2, 80, 300, 700, 600, 500};
        ArrayList<Integer> list = new ArrayList<>(List.of(prizePools));

        //在类中处理最大值实现方式
        /*MyRunnable mr = new MyRunnable(list);
        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);
        t1.setName("抽奖箱1");
        t2.setName("抽奖箱2");
        t1.start();
        t2.start();*/

        //返回值来比较最大值的实现方式
        MyCallable mc = new MyCallable(list);
        FutureTask<Integer> futureTask1 = new FutureTask<>(mc);
        FutureTask<Integer> futureTask2 = new FutureTask<>(mc);
        Thread t1 = new Thread(futureTask1);
        Thread t2 = new Thread(futureTask2);
        t1.setName("抽奖箱1");
        t2.setName("抽奖箱2");
        t1.start();
        t2.start();
        Integer max1 = futureTask1.get();
        Integer max2 = futureTask2.get();
        // 正确逻辑：直接比较两个线程返回的最大值
        if (max1 >= max2) {
            System.out.println("抽奖箱1产生最大奖项：" + max1 + "元");
        } else {
            System.out.println("抽奖箱2产生最大奖项：" + max2 + "元");
        }

    }
}
